#ifndef __WIZ_ACCESSOR_BUFFER_HPP__SHANHAOBO_19800429__
#define __WIZ_ACCESSOR_BUFFER_HPP__SHANHAOBO_19800429__

#include "./WizAccessorInner.hpp"

namespace Wiz
{
    namespace Accessor
    {
        namespace Buffer
        {
            struct WIZ_PRIVATE Type : public ::Wiz::Accessor::Inner::Type
            {
                typedef ::Wiz::Accessor::Inner::Type tSuper;

                //////////////////////////////////////////////////////////////////////////
                Type(::Wiz::ByteBuffer::Ptr InFileBufferPtr) : tSuper(), m_BufferPtr(InFileBufferPtr)
                {
                    m_CurrPos = 0;
                }
                ::Wiz::USize32::Type      m_CurrPos;
                ::Wiz::ByteBuffer::Ptr    m_BufferPtr;
                //////////////////////////////////////////////////////////////////////////

                virtual ::Wiz::Bool::Type   Read(::Wiz::Byte::OutPtr BuffPtr, ::Wiz::Size::In ReadSize);
                virtual ::Wiz::Bool::Type   Write(::Wiz::Byte::InPtr DataPtr, ::Wiz::Size::In WriteSize);

                virtual ::Wiz::Bool::Type   ReadAndAdvance(::Wiz::Byte::OutPtr BuffPtr, ::Wiz::Size::In ReadSize);
                virtual ::Wiz::Bool::Type   WriteAndAdvance(::Wiz::Byte::InPtr DataPtr, ::Wiz::Size::In WriteSize);

                virtual ::Wiz::USize32::Type  CurrentPosition();
                virtual ::Wiz::Void::Type   MoveTo(::Wiz::UInt32::In Pos);
                virtual ::Wiz::Void::Type   MoveToBegin();
                virtual ::Wiz::Void::Type   MoveToEnd();
                virtual ::Wiz::Void::Type   Move(::Wiz::UInt32::In Off);

                virtual ::Wiz::Bool::Type   Expand(::Wiz::USize32::In ESz);
                virtual ::Wiz::Bool::Type   Expand(::Wiz::Byte::Ptr DataPtr, ::Wiz::USize32::In ESz);
                //////////////////////////////////////////////////////////////////////////
            };
        } /// end of namespace Buffer
    } /// end of namespace Accessor
} /// end of namespace Wiz

#endif /*__WIZ_ACCESSOR_BUFFER_HPP__SHANHAOBO_19800429__*/

